﻿using System;
using System.Collections.Generic;
using DataAccess;
using DataAccess.Datatypes;
using BussinesLayer;


namespace BussinesLayer.Services
{
    public class UserServices
    {
        private UserManager _user = new UserManager();

        //Devuelve todos los usuarios
        public IEnumerable<User> GetUsers()
        {
            return _user.GetUsers();
        }

        //Agrega un usuario
        public void AddUser(string email, string socialId, string name, string password)
        {
            _user.AddUser(email, socialId, name, password);
        }

        public void AddUser(int id, string name)
        {
            try
            {
               //TODO: falta seguridad, validar que la invoca usuario con sesiòn iniciada
               {
                   _user.AddUser(id, name);
               }
            }
            catch (Exception)
            {
                
                throw;
            }
        }

        public void AddUser(int id, string name, string socialId)
        {
            try
            {
                //TODO: falta seguridad, validar que la invoca usuario con sesiòn iniciada
                {
                    _user.AddUser(id, name, socialId );
                }
            }
            catch (Exception)
            {

                throw;
            }
        }

        //Devuelve una lista de deseos de un usuario
        public WishList GetWishList(int userId, int siteId)
        {
            return _user.GetWishList(userId, siteId);
        }

        //Devuelve los deseos de una lista de deseos de un usuario
        public Wishes GetGoodsWishList(int userId, int siteId)
        {
            return _user.GetGoodsWishList(userId, siteId);
        }

        //Agrega una lista de deseos para un sitio a un usuario
        public long AddWishList(int userId, int siteId, decimal longitude, decimal latitude, decimal radius)
        {
            return _user.AddWishList(userId, siteId, longitude, latitude, radius);
        }

        //Modifica una lista de deseos de un usuario
        public void ModifyWishList(int wishId, decimal longitude, decimal latitude, decimal radius)
        {
            _user.ModifyWishList(wishId, longitude, latitude, radius);
        }

        //Agrega un criterio a una lista de deseos de un usuario
        public long AddCriterion(int userId, int siteId, int attributeId, string criterion)
        {
            return _user.AddCriterion(userId, siteId, attributeId, criterion);
        }

        //Modifica un criterio
        public void ModifyCriterion(int critId, string value)
        {
            _user.ModifyCriterion(critId, value);
        }

        //Elimina un criterio
        public void DeleteCriterion(int critId)
        {
            _user.DeleteCriterion(critId);
        }

        //Bloquea a un usuario
        public void BlockUser(int userId)
        {
            _user.BlockUser(userId);
        }

        //Devuelve una lista con los usuarios que han subido contenido inapropiado
        public IEnumerable<User> GetInfractors()
        {
            return _user.GetInfractors();
        }

        //Devuelve true si el usuario esta activo (no bloqueado)
        public bool IsActiveUser(string userName)
        {
            return _user.IsActiveUser(userName);
        }

        //Invocado por Watchdog - bloquea contenidos y usuarios
        public void Watchdog()
        {
            _user.Watchdog();
        }

    }
}
